The present invention relates generally to system and method for improving quality of large legacy software systems and more specifically to provide prescriptive suggestions for improving modularity of a software system.
Large software systems are generally developed systematically using structured development methodology. Amongst various aspects employed during development of software systems, one common aspect is to arrange entire software into multiple logical modules. Modules are logical grouping of software code, functions and related data structures that collectively perform a specific task or service.
Even though modular design guidelines are easy to implement at the start of a new project, however, design guidelines are grossly violated as software evolves. Also, when numerous programmers are involved with the process of editing or writing a code for a single application, one programmer may be required to edit unfamiliar code that was drafted by another. Due to programmer's unfamiliarity with a code, coding errors in the unfamiliar code may not be easily recognized. Thus, there exist many significant applications in business and commerce world with millions of lines of code that is difficult to maintain due to outsized violation of modular design principles.
Organizations maintaining large software systems spend considerable amount of time, effort, and money in running these systems. Further, considerable amount of abovementioned resources are wasted if there is a need to modify a specific module or enhance the system.
Conventional tools may help in understanding a program flow and in assessing impact on a software system if a change in software is performed. However, by observing certain tacit indicators such as overall difficulty in understanding a module or amount of time required for a minor change etc. one can infer that there is a need for an improved method and system. Moreover, the conventional tools are not adequate enough to identify which specific modules, functions, and data structures of the software system/application are causing deterioration and what steps should be taken to improve modularity of a software system.
In addition, improving modularity of a software system is a challenging and time consuming task requiring skills of a domain expert. Further, manual remedies provided by conventional tools may not be time efficient and may also be prone to human errors. Furthermore, due to multiple environments from where data is fetched there is always a need of highly skilled resource to assess the readiness and effort required for improving modularity. The problem is exacerbated by the fact that the original authors of the code are often not available and the huge code base exists with little or no documentation. Moreover, the cost and efforts involved in procuring such resources for different environment makes the entire process arduous and infeasible.
Consequently, there is a need for an efficient system and method for assessing and improving the modularity of a software system. Further, there is a need for system and method to prevent further degradation of modularity when a software system is being developed. Furthermore, there is a need for a software tool that recommends prescriptions/remedies and evaluates its effect on modularity without actually implementing the changes in the software system.